//
//  FXComposePictureView.swift
//  微博(Swift)
//
//  Created by V on 16/1/10.
//  Copyright © 2016年 V. All rights reserved.
//

import UIKit
import SVProgressHUD


private let FXComposePictureViewCellId = "HMComposePictureViewCellId"

class FXComposePictureView: UICollectionView {

    
    override init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout) {
        super.init(frame: frame, collectionViewLayout: UICollectionViewFlowLayout())
        setupUI()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    
    
    
    // 懒加载当前控件要显示的图片的一个数组
    private lazy var images: [UIImage] = [UIImage]()
    var addImageClickClourse: (() -> ())?

    
    private func setupUI(){
        // 当刚加载界面的时候，是隐藏的。当View上边有一个 item 的时候再显示出来
        hidden = true
        backgroundColor = UIColor.whiteColor()
        // 设置数据源
        dataSource = self
        delegate = self
        // 注册cell
        registerClass(FXComposePictureViewCell.self, forCellWithReuseIdentifier: FXComposePictureViewCellId)
        // 取到 layout 设置 cell 大小(如果没有设置 layout，就不能显示出 cell)
        let itemMargin: CGFloat = 5
        let itemWH: CGFloat = (SCREENW - 2 * FXComposeViewControllerMargin - 2 * itemMargin) / 3
        // 取出当前 view 的 layout
        let layout = collectionViewLayout as! UICollectionViewFlowLayout
        // 设置 layout
        layout.itemSize = CGSize(width: itemWH, height: itemWH)
        layout.minimumInteritemSpacing = itemMargin
        layout.minimumLineSpacing = itemMargin
    }
    
    
    // 供外界给 cell 赋值图片
    func addImage(image: UIImage){
        hidden = false
        // 在 imagePickerController 的选择完图片后 调用的这个方法，它传递进来一个 image。 判断是否已经 够9 张了
        if images.count == 9 {
            // 如果等于 9 ，就弹出一个警告框
            SVProgressHUD.showErrorWithStatus("最多只能添加9张图片")
            return
        }
        images.append(image)
        //当外界赋值图片后，就应当刷新数据
        reloadData()
    }
}




extension FXComposePictureView: UICollectionViewDataSource, UICollectionViewDelegate{
    // 组
    func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
        return 1
    }
    // 行
    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return images.count == 9 || images.count == 0 ? images.count : images.count + 1
    }
    // 内容
    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        // 1. 注册cell
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(FXComposePictureViewCellId, forIndexPath: indexPath) as! FXComposePictureViewCell
        // cell.backgroundColor = RandomColor()
        if indexPath.item == images.count {
            cell.image = nil
        }else{
        cell.image = images[indexPath.item]
        }
        cell.delegate = self
        cell.indexPath = indexPath
        return cell
    }
    
    // 点击cell 会执行的方法
    func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
        // 取消选中状态
        collectionView.deselectItemAtIndexPath(indexPath, animated: true)
        // 当点击最后加号的时候调用的方法
        if indexPath.row == images.count{
            // 点击加号：1. 跳转到选择图片的控制器中，2. 需要把这件事交给控制器做
            addImageClickClourse?()
        }
    }
}




// MARK: - 遵守cell 设置 的代理
extension FXComposePictureView: FXComposePictureViewCellDelegate{
    func deleteButtonClick(indexPath: NSIndexPath) {
        images.removeAtIndex(indexPath.item)
        reloadData()
    }
}



